import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 17655
 * Date: 2025-06-30
 * Time: 18:43
 */
public class test2 {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int n = nums.length;
        // 优先级队列，类型是int数组
        // 由于默认是小根堆，我们需要大根堆，所以需要重新定义
        PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>(){
            public int compare(int[] pair1,int[] pair2){
                return pair1[0] != pair2[0] ? pair2[0]-pair1[0] :pair2[1] - pair1[1];
            }
        });
        // 滑动窗口的k个数放进去
        for(int i=0;i<k;i++){
            pq.offer(new int[]{nums[i],i});
        }
        // 原先就是要取一个数出来，所以是n-k+1
        int[] ans = new int[n-k+1];
        // 进行比较
        ans[0] = pq.peek()[0];
        for(int i = k;i<n;i++){
            pq.offer(new int[]{nums[i],i});
            // 不在这个滑动窗口里面了
            while(pq.peek()[1]<=i-k){
                pq.poll();
            }
            // 正常记录数组
            ans[i-k+1] = pq.peek()[0];
        }
        return ans;
    }
}
